跳到主要内容

JavaScript 闭包

我们可以定义


function lazy_sum(arr) {

var sum = function () {

return arr.reduce(function (x, y) {

return x + y;

});

}

return sum;

}

这样,返回的结果就是求和函数而不是求和结果。

在闭包中注意循环变量

由于返回的函数并没有立即执行,如下语句会产生难以预料的结果:


function count() {

var arr = [];

for (var i=1; i<=3; i++) {

arr.push(function () {

return i * i;

});

}

return arr;

}

var results = count();

var f1 = results[0];

var f2 = results[1];

var f3 = results[2];

为此我们应该使用 let

用闭包封装私有变量


function create_counter(initial) {

var x = initial || 0;

return {

inc: function () {

x += 1;

return x;

}

}

}